<?php namespace Framework\Tool;
class Code{

		//验证码包含的东西: 验证码文字(一般为字母和数字的结合)

		//验证码种子，随机的验证码就是从这里截取
		public $str = 'abcdefghijklmnopqrstuvwxyz123456789';
		//验证码长度，也就是限定多少个
		public $len = 5;
		//宽度
		public $width = 100;
		//高度
		public $height = 30;
		//字体大小
		public $fontsize = 20;
		//字体颜色(十六位进制)
		public $fontColor ='#333333';
		//字体文件
		public $fontfile ='framework/Tool/font.ttf';
		//背景颜色
		public $bgcolor ='#dc22ad';
		//最后显示的验证码
		public $code;
		//图像
		public $img;

		//初始化
		public function __construct(){}

		//显示验证码和画布
		public function show(){

			//创建画布
			$this ->createImg();
			//提取验证码字符串
			$this-> setCodeStr();
			//向图片上写入验证码文字
			$this-> createText();


			header('content-type:image/png');
			imagepng($this->img);
		}

		/**
		 * 创建画布
		 * @return [type] [description]
		 */
		private function createImg(){

			
			// 绘制画布
			$this->img = imagecreatetruecolor($this->width,$this->height);
			//定义颜色
			$color = $this->getColor($this->bgcolor);

			// 填充画布
			imagefill($this->img, 0, 0, $color);

			

		}

		/**
		 * 获取验证码字符串
		 */
		private function setCodeStr(){

			//定义一个空字符串，用于接收截取的随机5个字符串
			$code = '';
			//for循环输出随机的5个字符
			for ($i=0; $i <$this->len ; $i++) { 
				//定义一个变量得到随机的5个字符
				$pos = mt_rand(0,strlen($this->str)-1);

				//$this->str[$pos]是啥意思？
				//str 是上面的字符串
				$code .= $this->str[$pos];
			}
			$this->code = strtoupper($code);
			$_SESSION['code']=$this->code;
		}

		/**
		 * 在图片上写入验证码文字
		 * @return [type] [description]
		 */
		private function createText(){

			//定义字体颜色
			$color = $this->getColor($this->fontColor);
			$w = $this->width/$this->len;
			//循环写入文字
			for ($i=0; $i <$this->len ; $i++) { 

			imagettftext($this->img,$this->fontsize, 0, $w*$i+5, 20+mt_rand(0,10), $color, $this->fontfile, $this->code[$i]);
			}

		}


		/**
		 * 获取颜色对象
		 * @param  [type] $color [16进制色值]
		 * @return [type]        [颜色对象]
		 */
		//私有的函数，
		private function getColor($color){

			//???怎么保证得到的是红绿蓝颜色
			//十六进制的颜色表示里,前面两位数字转换成rgb模式就是表示红色，中间两位表示绿色，最后两位表示蓝色
			$red = hexdec(substr($color, 1,2));
			$green = hexdec(substr($color,3,2));
			$blue = hexdec(substr($color,5,2));

			//返回定义用于画布的定义颜色
			return imagecolorallocate($this->img, $red, $green, $blue);
		}















}